home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 8542 / 8542.xpi / chrome / lastpass.jar / content / q < prev    next >
Text File  |  2009-10-13  |  74KB  |  1,659 lines

  1. changeset:   15129:c4b07da1fb33
  2. parent:      15126:79aa3d2f4ae5
  3. user:        joe@rodan.lastpass.com
  4. date:        Thu Oct 08 11:32:33 2009 -0400
  5. files:       .tools/brute.php .tools/shrink_all.php firefox/Makefile firefox/content/basicauth.js firefox/content/comm.js firefox/content/commc.js firefox/content/fillforms.js firefox/content/fillformsc.js firefox/content/lastpass.js firefox/content/login.js firefox/content/loginlogic.js firefox/content/loginlogicc.js firefox/content/namedpipes.js firefox/content/varsc.js
  6. description:
  7. lots of changes to strip any parens out of the same line that includes lpdbg() and add it to make dev to catch it then and there.  also now doing a strip_comments.php on all the shrink_all.php files so that they get their lpdbg()'s stripped too
  8.  
  9.  
  10. diff -r 79aa3d2f4ae5 -r c4b07da1fb33 firefox/content/lastpass.js
  11. --- a/firefox/content/lastpass.js    Thu Oct 08 11:30:54 2009 -0400
  12. +++ b/firefox/content/lastpass.js    Thu Oct 08 11:32:33 2009 -0400
  13. @@ -1344,7 +1344,7 @@
  14.             loginshown = true;
  15.           }
  16.         }else{
  17. -         lpdbg("checkadd","found tld match.  basicauth="+(fi.basic_auth?"YES":"no"));
  18. +         lpdbg("checkadd","found tld match.  basicauth="+fi.basic_auth);
  19.           LP.lpGetCurrentWindow().setTimeout(func,  100);
  20.           return loginshown;
  21.         }
  22. @@ -1376,7 +1376,7 @@
  23.         //------------------------------------
  24.         //Check for autologin failures.
  25.         var pluginLoginFailure = lpcheckForLoginFailures(browser, doc, currenturl, urlparts);
  26. -       lpdbg("checkpage",  "checking for login failures...result="+(pluginLoginFailure?"YES":"no"));
  27. +       lpdbg("checkpage",  "checking for login failures - result="+pluginLoginFailure);
  28.  
  29.         //------------------------------------
  30.         //Check for manual logins
  31. @@ -1397,7 +1397,7 @@
  32.      if (true)
  33.      {
  34.        bShowedAutoLoginNote = lpCheckForAutoLogin(browser, doc, pluginLoginFailure);
  35. -      lpdbg("checkpage","checking for autologin........result="+(bShowedAutoLoginNote?"YES":"no"));
  36. +      lpdbg("checkpage","checking for autologin........result="+bShowedAutoLoginNote);
  37.      }
  38.  
  39.      if(bShowedAutoLoginNote) {
  40. @@ -1639,7 +1639,7 @@
  41.                       foundfieldnames = true;
  42.                   }
  43.                 } else {
  44. -                       lpdbg("autologin","Checking form (no fields)");
  45. +                       lpdbg("autologin","Checking form -- no fields");
  46.                   form = lpcheckpwfield(win,doc, lpaccts[i].logins[j].tld, p, o, multi);
  47.                   onlyfill_local = true;
  48.                 }
  49. @@ -1781,7 +1781,7 @@
  50.       if (!loginError) {
  51.         if (!autofilled && lpAutomaticallyFill && !lpbLoginSitePrompt) {
  52.           for (var i = 0; i < aids.length; i++) {
  53. -           lpdbg("autofill", "autofilled: " + autofilled + " Checking " +aids[i].id + " : tldmatch: " + aids[i].tldmatch + " formmatch: " +  aids[i].formmatch  + " Method okay: " + aids[i].methodok + " never_autofil " +  parseInt(lpaccts[aids[i].id].never_autofill));
  54. +           lpdbg("autofill", "autofilled: " + autofilled + " Checking " +aids[i].id + " : tldmatch: " + aids[i].tldmatch + " formmatch: " +  aids[i].formmatch  + " Method okay: " + aids[i].methodok + " never_autofil " +  lpaccts[aids[i].id].never_autofill);
  55.             if (parseInt(lpaccts[aids[i].id].never_autofill) != 1) {
  56.               if((!lpbLoginSitePrompt && !lpaccts[aids[i].id].pwprotect) || recentlyprompted){
  57.                 if (aids[i].tldmatch && aids[i].formmatch && aids[i].methodok) {
  58. @@ -3108,7 +3108,8 @@
  59.                      if(''==doc.lastpass_recheck_fields[i]['f'].value)
  60.                      {
  61.                        if (doc.lastpass_recheck_fields[i]['f'].value != doc.lastpass_recheck_fields[i]['v']) {
  62. -                        lpdbg("redo", 'REDO: ' + getname(doc.lastpass_recheck_fields[i]['f']) + ' = ' + doc.lastpass_recheck_fields[i]['v']); 
  63. +                        var rname = getname(doc.lastpass_recheck_fields[i]['f']);
  64. +                        lpdbg("redo", 'REDO: ' + rname + ' = ' + doc.lastpass_recheck_fields[i]['v']); 
  65.                          doc.lastpass_recheck_fields[i]['f'].value = doc.lastpass_recheck_fields[i]['v']; 
  66.                          fire_onchange(doc.lastpass_recheck_fields[i]['f']);
  67.                        }
  68. @@ -3765,8 +3766,9 @@
  69.        var goodform = false;
  70.        for (var i=0 ; i<form.elements.length ; ++i)
  71.        {
  72. -        //lpdbg("formsubmit","element "+i+" of "+form.elements.length+" : name="+form.elements[i].name+" id="+form.elements[i].id+" type="+form.elements[i].type+" isvisable="+lpIsVisible(form.elements[i]));
  73. -        if (form.elements[i].type!="hidden" && lpIsVisible(form.elements[i]))
  74. +        var isVis = lpIsVisible(form.elements[i]);
  75. +        //lpdbg("formsubmit","element "+i+" of "+form.elements.length+" : name="+form.elements[i].name+" id="+form.elements[i].id+" type="+form.elements[i].type+" isvisable="+isVis);
  76. +        if (form.elements[i].type!="hidden" && isVis)
  77.          {
  78.            goodform = true;
  79.            break;
  80. @@ -4057,8 +4059,10 @@
  81.    }
  82.  
  83.    // USEFUL FOR DEBUGGING
  84. -  for (var e=0; e<formElements.length; e++)
  85. -    lpdbg("formsubmit","element "+e+" : type="+formElements[e].type+" nameid="+getname(formElements[e])+" value="+formElements[e].value);
  86. +  /*for (var e=0; e<formElements.length; e++) {
  87. +    var fename = getname(formElements[e]);
  88. +    lpdbg("formsubmit","element "+e+" : type="+formElements[e].type+" nameid="+fename+" value="+formElements[e].value);
  89. +  }*/
  90.    
  91.    var tld=lp_gettld(urlparts["host"]);
  92.  
  93. @@ -4686,7 +4690,6 @@
  94.        typeof(lpusername)!="undefined" && lpusername!=null && lpusername!="" &&
  95.        typeof(lpusername_hash)!="undefined" && lpusername_hash!=null && lpusername_hash!="")
  96.    {
  97. -    //lpdbg("login","writing keyfile using lppwdeckeyhex="+lp_bin2hex(lppwdeckey));
  98.      var keydata = LPAES.Encrypt({pass:lppwdeckey, data:key, b64:true, mode:"ecb", bits:256});
  99.      var verificationdata = LPAES.Encrypt({pass:lp_local_key, data:"lastpass rocks", b64:true, mode:"ecb", bits:256});
  100.      lpWriteFile(lpusername_hash+"_lp.act.lps", keydata+"\n"+verificationdata);
  101. @@ -6826,7 +6829,8 @@
  102.        return;
  103.      }
  104.    }
  105. -  lpdbg("writefile",filename+" val="+(val.length>20 ? (val.substring(0,20)+"...") : val));
  106. +  var shortVal = (val.length>20 ? (val.substring(0,20)+"...") : val);
  107. +  lpdbg("writefile",filename+" val="+shortVal);
  108.    
  109.    try{
  110.      var file = null;
  111. @@ -8311,12 +8315,13 @@
  112.  
  113.    if(lpautoauto && parseInt(lpaccts[id].autologin)==1 ) {
  114.      var currTime = lp_get_gmt_timestamp();
  115. -    if((currTime - lpaccts[id].last_touch) > lpautoautoVal) {
  116. -      lpdbg("autoauto", "DO autoauto on " + id + " difftime: " + (currTime - lpaccts[id].last_touch) +  " autautoVal: " + lpautoautoVal + " lpaccts[id].autologin: " + lpaccts[id].autologin);
  117. +    var diffTime = (currTime - lpaccts[id].last_touch);
  118. +    if(diffTime > lpautoautoVal) {
  119. +      lpdbg("autoauto", "DO autoauto on " + id + " difftime: " + diffTime +  " autautoVal: " + lpautoautoVal + " lpaccts[id].autologin: " + lpaccts[id].autologin);
  120.        LP.SetLastTouch(lpaccts[id]);
  121.        return true;
  122.      } else {
  123. -      lpdbg("autoauto", "Too soon to autoauto " + id + " last_touch diff: " + (currTime - lpaccts[id].last_touch) + " which should be less than: " + lpautoautoVal );
  124. +      lpdbg("autoauto", "Too soon to autoauto " + id + " last_touch diff: " + diffTime + " which should be less than: " + lpautoautoVal );
  125.      }
  126.    }
  127.    return false;
  128. @@ -10060,7 +10065,6 @@
  129.  
  130.     // Couldn't get this to work
  131.     // var notification = event.target;
  132. -   //lpdbg("js", "lp_notificationClose typeof:" + typeof(notification));
  133.     //notification.browser.contentDocument.LPlpshowednote=2;
  134.     //notification.removeEventListener("command", lp_notificationClose, true);
  135.  
  136. @@ -13832,12 +13836,8 @@
  137.      if (!decrypt)
  138.        return data;
  139.      
  140. -    //lpdbg("sesame","before decryption : "+data.substring(0,30));
  141. -    //lpdbg("yubikey","before decryption : "+data.substring(0,30));
  142.      if (lpusexpcomencrypt())
  143.        data = lpdeccachemiss(data)
  144. -    //lpdbg("sesame","after decryption  : "+data.substring(0,30));
  145. -    //lpdbg("yubikey","after decryption  : "+data.substring(0,30));
  146.  
  147.      // If required, decrypt accounts file with offline password
  148.      if (data && data!="")
  149. @@ -13929,11 +13929,7 @@
  150.      }
  151.      if (offlinepasswordhex)
  152.      {
  153. -      //lpdbg("sesame","before encrypting data="+data.substring(0,xmlheaderlength));
  154. -      //lpdbg("yubikey","before encrypting data="+data.substring(0,xmlheaderlength));
  155.        data = lpenc(data,lp_hex2bin(offlinepasswordhex))
  156. -      //lpdbg("sesame","after encrypting data="+data.substring(0,xmlheaderlength));
  157. -      //lpdbg("yubikey","after encrypting data="+data.substring(0,xmlheaderlength));
  158.        if (!data || data=="")
  159.        {
  160.          lpdbg("error","Failed to encrypt data in save_accounts_fileraw");
  161.  
  162. changeset:   15122:ea855ca8741f
  163. user:        Andrew Zitnay <drew@lastpass.com>
  164. date:        Thu Oct 08 09:03:14 2009 -0400
  165. files:       IEToolband/LPToolBarCtrl.cpp firefox/content/basicauth.js firefox/content/lastpass.js
  166. description:
  167. noticed last night that basicauth didn't respect equivalent domains ..
  168. along the way found a few more spots we weren't
  169.  
  170.  
  171. diff -r 0fcbcdf9a99f -r ea855ca8741f firefox/content/lastpass.js
  172. --- a/firefox/content/lastpass.js    Wed Oct 07 19:20:09 2009 -0400
  173. +++ b/firefox/content/lastpass.js    Thu Oct 08 09:03:14 2009 -0400
  174. @@ -1855,7 +1855,7 @@
  175.             if(topleveldoc.aid.length > 1 || show_report_broken || autofilled==0 || have_multi){
  176.  
  177.  
  178. -             if(typeof(browser.lastautologintld)!="undefined" && browser.lastautologintld==tld){
  179. +             if(typeof(browser.lastautologintld)!="undefined" && LP.compare_tlds(browser.lastautologintld, tld)){
  180.  
  181.                 //Some sites have login forms on every page and we end up
  182.                 //showing this notification too much. So only show it when
  183. @@ -10714,7 +10714,7 @@
  184.      //-----------------------------------------------
  185.      //First do the Generated Passwords
  186.      for (var i in lpgenpws){
  187. -      if (current_time - lpaccts[i].last_touch <= 600 || lpaccts[i].tld == tld){ // 10 minutes
  188. +      if (current_time - lpaccts[i].last_touch <= 600 || LP.compare_tlds(lpaccts[i].tld, tld)){ // 10 minutes
  189.          if (first) {
  190.            var tempItem = doc.createElement('menuseparator');
  191.            tempItem.setAttribute("id", "menudelim");
  192.  
  193. changeset:   15119:5b7160ccaeca
  194. user:        Andrew Zitnay <drew@lastpass.com>
  195. date:        Wed Oct 07 13:34:43 2009 -0400
  196. files:       IEToolband/Notification.cpp IEToolband/SiteInfo.cpp IEToolband/changePasswordDlg.cpp IEToolband/changePasswordDlg.h firefox/content/changepw.js firefox/content/lastpass.js firefox/content/siteinfo.js
  197. description:
  198. i noticed a slight problem with our password change dialogs when testing
  199. a password change on hiblia.com .. i have a domain equivalency for
  200. hiblia.com and wannaspeak.com, so the notification bar said hiblia.com
  201. but then the password change dialog said wannaspeak.com (which just
  202. happened to be the tld of the last site in the dialog)
  203.  
  204. so, pass the correct tld into the dialog, so we can show it properly
  205.  
  206.  
  207. diff -r 3138639ea61d -r 5b7160ccaeca firefox/content/lastpass.js
  208. --- a/firefox/content/lastpass.js    Wed Oct 07 12:46:49 2009 -0400
  209. +++ b/firefox/content/lastpass.js    Wed Oct 07 13:34:43 2009 -0400
  210. @@ -9389,7 +9389,7 @@
  211.  
  212.  function lp_changepwbtn(notification, description){
  213.    if (typeof(notification.extra['matchingaccts']) != 'undefined') {
  214. -    LP.lpGetCurrentWindow().openDialog(lpchrome_base + "content/changepw.xul", '_blank', 'chrome,titlebar,toolbar,centerscreen,modal', notification.extra['matchingaccts'], notification.extra['password']);
  215. +    LP.lpGetCurrentWindow().openDialog(lpchrome_base + "content/changepw.xul", '_blank', 'chrome,titlebar,toolbar,centerscreen,modal', notification.extra['matchingaccts'], notification.extra['password'], "0", notification.extra['tld']);
  216.    } else {
  217.      lpchangepw(notification.extra["username"], notification.extra["password"], notification.extra["id"]);
  218.    }
  219.  
  220. changeset:   15095:f7636c6c19a3
  221. user:        sameer <sameer@lastpass.com>
  222. date:        Mon Oct 05 11:44:15 2009 -0400
  223. files:       firefox/content/lastpass.js firefox/content/loginlogic.js firefox/content/vars.js
  224. description:
  225. if we do manage to login online via the retry timer then cancel the timer
  226. also do this if we logout
  227. this is to prevent a user from logging out of one account and into another account and
  228. then have the previous user's timer fire
  229.  
  230.  
  231. diff -r 4b59f67c6470 -r f7636c6c19a3 firefox/content/lastpass.js
  232. --- a/firefox/content/lastpass.js    Mon Oct 05 11:33:43 2009 -0400
  233. +++ b/firefox/content/lastpass.js    Mon Oct 05 11:44:15 2009 -0400
  234. @@ -4538,6 +4538,17 @@
  235.    lpidentities = new Array();
  236.    lpequivdomains = new Array();
  237.  
  238. +  if (lpnotifytimerid)
  239. +  {
  240. +    LP.mostRecent().clearTimeout(lpnotifytimerid);
  241. +    lpnotifytimerid = null;
  242. +  }
  243. +  if (lpretryonlinetimerid)
  244. +  {
  245. +    LP.mostRecent().clearTimeout(lpretryonlinetimerid);
  246. +    lpretryonlinetimerid = null;
  247. +  }
  248. +  
  249.    lpisadmin = false;
  250.    lploglogins = false;
  251.    lpemail = "";
  252.  
  253. changeset:   15094:4b59f67c6470
  254. user:        sameer <sameer@lastpass.com>
  255. date:        Mon Oct 05 11:33:43 2009 -0400
  256. files:       firefox/content/lastpass.js firefox/content/loginlogic.js
  257. description:
  258. if we login online successfully, we need to dismiss notifications
  259.  
  260.  
  261. diff -r e2955f0de924 -r 4b59f67c6470 firefox/content/lastpass.js
  262. --- a/firefox/content/lastpass.js    Mon Oct 05 09:28:19 2009 -0400
  263. +++ b/firefox/content/lastpass.js    Mon Oct 05 11:33:43 2009 -0400
  264. @@ -7590,6 +7590,9 @@
  265.  function set_secprompts(a,from)
  266.  {
  267.    if(!a || typeof(a.getAttribute)=='undefined')  {
  268. +    // SK: When I changed my password, this failed when from=="xml"
  269. +    //     ...not sure if this is expected and it's a backwards compatibility thingy
  270. +    //     So for now, just add a comment stating how to redup
  271.      lpdbg("error", "set_secprompts on non-existant attribute from: " + from);
  272.      return;
  273.    }
  274.  
  275. changeset:   15093:e2955f0de924
  276. user:        sameer <sameer@lastpass.com>
  277. date:        Mon Oct 05 09:28:19 2009 -0400
  278. files:       firefox/content/lastpass.js firefox/content/loginlogic.js
  279. description:
  280. some FF fixes/changes
  281.  
  282.  
  283. diff -r d14f7522fcef -r e2955f0de924 firefox/content/lastpass.js
  284. --- a/firefox/content/lastpass.js    Thu Oct 01 22:58:17 2009 -0400
  285. +++ b/firefox/content/lastpass.js    Mon Oct 05 09:28:19 2009 -0400
  286. @@ -574,8 +574,8 @@
  287.          if (eventdata1 && eventdata1.value == 'settings')
  288.          {
  289.            //want to also do login check to update settings returned from login
  290. -          var fromwebsite = ((eventdata2 && eventdata2.value=='2') ? "websiterefreshrsa" : "websiterefresh");
  291. -          lp_logincheckhelper(fromwebsite);
  292. +          var from = (eventdata2 && eventdata2.value=='2') ? "websiterefreshrsa" : "websiterefresh";
  293. +          lp_logincheckhelper(from);
  294.          }
  295.          else
  296.            LP.lpGetAccounts();
  297. @@ -4668,13 +4668,6 @@
  298.    //settings override - leave this comment
  299.  }
  300.  
  301. -function OnAllLogins()
  302. -{
  303. -  LP.lpprefsSetBoolPref('ffhasloggedin', true, false);
  304. -  LP.SetupUserPreferences();
  305. -  LP.lpSetupIdleTimer();
  306. -}
  307. -
  308.  function lpWriteKeyFile()
  309.  {
  310.    var key = lp_bin2hex(lp_local_key);
  311.  
  312. changeset:   15092:d14f7522fcef
  313. parent:      15037:99481c851d8c
  314. user:        sameer <sameer@lastpass.com>
  315. date:        Thu Oct 01 22:58:17 2009 -0400
  316. files:       firefox/content/lastpass.js firefox/content/lastpassext.js firefox/content/login.js firefox/content/loginlogic.js firefox/content/namedpipes.js firefox/content/prefs.js firefox/content/rsakeys.js firefox/content/vars.js firefox/content/welcome.js
  317. description:
  318. some ff changes - gotta test still as i had a few conflicts
  319.  
  320.  
  321. diff -r 99481c851d8c -r d14f7522fcef firefox/content/lastpass.js
  322. --- a/firefox/content/lastpass.js    Thu Oct 01 17:24:35 2009 -0400
  323. +++ b/firefox/content/lastpass.js    Thu Oct 01 22:58:17 2009 -0400
  324. @@ -489,7 +489,7 @@
  325.          if (!lploggedin)
  326.          {
  327.            lpdbg("websiteevent","login : simple case : trying to login");
  328. -          LP.lplogincheck(true);
  329. +          LP.lplogincheck("websitelogin");
  330.          }
  331.          else
  332.            lpdbg("websiteevent","login : simple case : already logged in => doing nothing");
  333. @@ -544,7 +544,7 @@
  334.              // Webroot case - we get passed wxhash
  335.              // - NOTE: forwarding wxhash to login_check causes our session to be recreated
  336.              lpdbg("websiteevent","login : not logged in => setting key and trying login_check : webroot case");
  337. -            //lp_logincheckhelper(true,null,username,wxhash);
  338. +            //lp_logincheckhelper("webrootwebsitelogin",null,username,wxhash);
  339.            }
  340.            else
  341.            {
  342. @@ -552,7 +552,7 @@
  343.              lpdbg("websiteevent","login : not logged in => setting key and trying login_check : normal case");
  344.            }
  345.            CHANGEKEY(keybin);
  346. -          LP.lplogincheck(true);
  347. +          LP.lplogincheck("websitelogin");
  348.          }
  349.        }
  350.        else
  351. @@ -571,11 +571,13 @@
  352.        if (lploggedin){
  353.          var eventdata1 = doc.getElementById('eventdata1');
  354.          var eventdata2 = doc.getElementById('eventdata2');
  355. -        if (eventdata1 && eventdata1.value == 'settings') {
  356. +        if (eventdata1 && eventdata1.value == 'settings')
  357. +        {
  358.            //want to also do login check to update settings returned from login
  359. -          var fromwebsite = (eventdata2 && eventdata2.value=='2' ? 2 : true);
  360. +          var fromwebsite = ((eventdata2 && eventdata2.value=='2') ? "websiterefreshrsa" : "websiterefresh");
  361.            lp_logincheckhelper(fromwebsite);
  362. -        } else
  363. +        }
  364. +        else
  365.            LP.lpGetAccounts();
  366.        }
  367.        break;
  368. @@ -603,7 +605,7 @@
  369.          // - we're resetting the key but not the user's username, is that ok?
  370.          lpdbg("websiteevent","keyweb2plug : username or password change for username="+username+" => resetting key");
  371.          lprsa_userchangedpassword();
  372. -        CHANGEKEY(lp_hex2bin(eventdata1.value));
  373. +        CHANGEKEY(lp_hex2bin(localkey));
  374.          lpWriteKeyFile(); // this does nothing if we're not logged in
  375.        }
  376.        else
  377. @@ -4491,7 +4493,6 @@
  378.    fix_toolbar_mode();
  379.    LP.lphelpstats = null;
  380.    lppd = 0;
  381. -  lploggedinoffline = false;
  382.  
  383.    // Give the logout request a chance to start, then kill the session ID
  384.    lp_phpsessid='';
  385. @@ -4513,11 +4514,11 @@
  386.      lpdialogs[i].close();
  387.    lpdialogs = new Array();
  388.    lploggedin = false;
  389. +  lploggedinoffline = false;
  390.    if (!LP.lpprefsHasUserValue('ffhasloggedinsuccessfully', false)) {
  391.      LP.lpprefsSetBoolPref('ffhasloggedinsuccessfully', true, false);
  392.      LP.flush_prefs();
  393.    }
  394. -  lploggedincached = false;
  395.    CHANGEKEY('');
  396.    lpdeccache = new Array();
  397.    lpdeccachekey = null;
  398. @@ -7101,10 +7102,8 @@
  399.        // instead of an immediate logincheck, we now do an httptest first to
  400.        // avoid the case where someone's at a hotel that takes over
  401.        // lastpass.com's dns and causes cert errors
  402. -      //LP.lplogincheck();
  403. -      if (lpdohttptest) {
  404. +      if (lpdohttptest)
  405.          LP.httptest();
  406. -      }
  407.      }
  408.  
  409.      //Show release notes if upgraded
  410. @@ -12785,24 +12784,6 @@
  411.      LP.flush_prefs();
  412.  }
  413.  
  414. -// Called when we login locally no network
  415. -this.lpset=function (key,username) {
  416. -   CHANGEKEY(key);
  417. -   lpusername = username;
  418. -   lpusername_hash = lp_sha256(lpusername);
  419. -   OnAllLogins();
  420. -   lpuid="";
  421. -   fix_toolbar_mode();
  422. -   lploggedin = true;
  423. -   lploggedincached = true;
  424. -   lpisadmin = false;
  425. -   lploglogins = false;
  426. -   lpemail = "";
  427. -   lp_local_accts_version = -1;
  428. -   lp_server_accts_version = -1;
  429. -   lpLastPwPrompt = 0;
  430. -}
  431. -
  432.  this.isadmin = function()
  433.  {
  434.    return lpisadmin;
  435.  
  436. changeset:   15035:23c5406388e0
  437. parent:      15032:6fc8fcc1923d
  438. user:        Andrew Zitnay <drew@lastpass.com>
  439. date:        Thu Oct 01 17:08:39 2009 -0400
  440. files:       IEToolband/CommonHandlers.cpp IEToolband/LPToolBarCtrl.cpp IEToolband/Notification.cpp IEToolband/Preferences.cpp IEToolband/Preferences.h firefox/content/lastpass.js firefox/content/loginlogic.js firefox/content/vars.js firefox/make_webroot_wav firefox/make_webroot_wisc
  441. description:
  442. webroot doesn't want us to show any login notifications until we've been
  443. logged into successfully at least once .. i guess it's fine for them,
  444. since they don't have any notion of create account on their login
  445. dialog, but i'm leaving it as-is for us
  446.  
  447.  
  448. diff -r 6fc8fcc1923d -r 23c5406388e0 firefox/content/lastpass.js
  449. --- a/firefox/content/lastpass.js    Thu Oct 01 16:11:28 2009 -0400
  450. +++ b/firefox/content/lastpass.js    Thu Oct 01 17:08:39 2009 -0400
  451. @@ -4513,6 +4513,10 @@
  452.      lpdialogs[i].close();
  453.    lpdialogs = new Array();
  454.    lploggedin = false;
  455. +  if (!LP.lpprefsHasUserValue('ffhasloggedinsuccessfully', false)) {
  456. +    LP.lpprefsSetBoolPref('ffhasloggedinsuccessfully', true, false);
  457. +    LP.flush_prefs();
  458. +  }
  459.    lploggedincached = false;
  460.    CHANGEKEY('');
  461.    lpdeccache = new Array();
  462. @@ -8629,6 +8633,7 @@
  463.      if (!shownotifications) return;
  464.      if (!lpShowNotifications) return;
  465.      if (!lpShowLoginNotifications) return;
  466. +    if (LP.NO_LOGIN_NOTIFICATION_UNTIL_LOGIN && !LP.lpprefsHasUserValue('ffhasloggedinsuccessfully', false)) return;
  467.      buttons.push({
  468.        label: LP.lpgs("LastPassMasterLogin"),
  469.        accessKey: null,
  470.  
  471. changeset:   15002:68e962275e3b
  472. user:        joe@joes-vostro-200.local
  473. date:        Wed Sep 30 11:40:39 2009 -0400
  474. files:       firefox/content/lastpass.js
  475. description:
  476. Include the name of the site you're deleting  -- somehow people are accidentally deleteing the wrong site
  477.  
  478.  
  479. diff -r a571f14ab270 -r 68e962275e3b firefox/content/lastpass.js
  480. --- a/firefox/content/lastpass.js    Wed Sep 30 10:01:15 2009 -0400
  481. +++ b/firefox/content/lastpass.js    Wed Sep 30 11:40:39 2009 -0400
  482. @@ -11789,7 +11789,7 @@
  483.        return;
  484.    }
  485.  
  486. -  if (LP.lpConfirmYesNo(LP.lpgs('Are you sure you would like to delete this ' + (lpacct.isbookmark ? 'bookmark' : (lpacct.genpw ? 'generated password' : (lpacct.sn ? 'secure note' : 'site'))) + '?'), wino)) {
  487. +  if (LP.lpConfirmYesNo(LP.lpgs('Are you sure you would like to delete this ' + (lpacct.isbookmark ? 'bookmark' : (lpacct.genpw ? 'generated password' : (lpacct.sn ? 'secure note' : 'site'))) + '?' + '  (' +lpacct.name +')'), wino)) {
  488.      // update the local data structure before we make the request
  489.      deleteIdLocally(id);
  490.  
  491. @@ -13015,11 +13015,26 @@
  492.  }
  493.  
  494.  this.ConfirmMultipleDelete=function(tdoc, twin, group){
  495. -  var msg = (tdoc.selected_ids.length > 1 ? "Are you sure you would like to delete the selected sites?" : "Are you sure you would like to delete this site?");
  496. +  var extra = "";
  497. +  var msg = "";
  498. +  if(tdoc.selected_ids.length > 1) {
  499. +    msg = "Are you sure you would like to delete the selected sites?";
  500. +  } else { 
  501. +    msg = "Are you sure you would like to delete this site?";
  502. +    extra = " ( ";
  503. +    var selected_ids = tdoc.selected_ids;
  504. +    for(var i = 0; i < selected_ids.length; i++){
  505. +      var id = selected_ids[i];
  506. +      var lpacct = lpaccts[id];
  507. +      extra += lpacct.name + ' ' ;
  508. +    }
  509. +    extra += ") ";
  510. +  }
  511.    if (group) {
  512.      msg = 'Are you sure you would like to delete this group?';
  513. -  }
  514. -  if (LP.lpConfirmYesNo(LP.lpgs(msg), twin)) {
  515. +    extra = " (" +  group + ") ";
  516. +  }
  517. +  if (LP.lpConfirmYesNo(LP.lpgs(msg) + extra, twin)) {
  518.      // update the local data structure before we make the request
  519.      LP.deleteSelectedSites(tdoc, twin, group);
  520.    }
  521.  
  522. changeset:   14965:62b063cfcdcb
  523. user:        sameer <sameer@lastpass.com>
  524. date:        Sat Sep 26 21:25:52 2009 -0400
  525. files:       create_account.php firefox/content/lastpass.js firefox/content/loginlogic.js firefox/content/vars.js indexheader.php js/otp.js webroot/frame_accounts.php
  526. description:
  527. Bug fixes for FF offline before online stuff.
  528. Along the way noticed that we were trying to write the keyfile when we weren't logged in, causing
  529. us to crate a "_lp.act.lps" file.
  530. Had to change the login processing stuff a bit...so simplified the keyweb2plug and login website
  531. events so the login logic could all be in the 'login' case and not duplicated.  Made sure to
  532. maintain backwards compatibility though.
  533. So basically, keyweb2plug now only does stuff for the password change case.
  534. We pass some more params to the login to handle what keyweb2plug used to do.
  535.  
  536. Have to do a bit more testing making sure i test all the spots where we call logincheck
  537. (named pipes, refresh, passwordchange, saveprefs, etc.)
  538. and then move on to IE.
  539.  
  540.  
  541. diff -r 30f81e462008 -r 62b063cfcdcb firefox/content/lastpass.js
  542. --- a/firefox/content/lastpass.js    Fri Sep 25 20:01:35 2009 -0400
  543. +++ b/firefox/content/lastpass.js    Sat Sep 26 21:25:52 2009 -0400
  544. @@ -466,46 +466,99 @@
  545.  
  546.  function lpwebsiteevent(eventtype, doc, urlparts)
  547.  {
  548. -  lpdbg("websiteevent","eventtype="+eventtype);
  549. +  var data1 = doc.getElementById('eventdata1') ? doc.getElementById('eventdata1').value : "";
  550. +  var data2 = doc.getElementById('eventdata2') ? doc.getElementById('eventdata2').value : "";
  551. +  var data3 = doc.getElementById('eventdata3') ? doc.getElementById('eventdata3').value : "";
  552. +  var data4 = doc.getElementById('eventdata4') ? doc.getElementById('eventdata4').value : "";
  553. +  var data5 = doc.getElementById('eventdata5') ? doc.getElementById('eventdata5').value : "";
  554. +  lpdbg("websiteevent","eventtype="+eventtype+"\ndata1="+data1+"\ndata2="+data2+"\ndata3="+data3+"\ndata4="+data4+"\ndata5="+data5);
  555.    
  556.    //var eventtype = evt.target.getAttribute("eventtype");
  557.    switch (eventtype) {
  558.      case "login":
  559. -      var wxusername = doc.getElementById('eventdata1') ? doc.getElementById('eventdata1').value : "";
  560. -      var keyhex     = doc.getElementById('eventdata2') ? doc.getElementById('eventdata2').value : "";
  561. -      var wxhash     = doc.getElementById('eventdata3') ? doc.getElementById('eventdata3').value : "";
  562. -      if (wxusername!="" && keyhex!="" && wxhash!="")
  563. -      {
  564. +      var username = data1.toLowerCase().replace(/\s*/g,'');
  565. +      var keyhex   = data2
  566. +      var wxhash   = data3;
  567. +      
  568. +      if (username=="" && keyhex=="" && wxhash=="")
  569. +      {
  570. +        //    indexheader.php : sessionid passed via ?lc=x passed
  571. +        // or accts.js        : inside createGrid()
  572. +        
  573. +        // Login if not already logged in
  574. +        if (!lploggedin)
  575. +        {
  576. +          lpdbg("websiteevent","login : simple case : trying to login");
  577. +          LP.lplogincheck(true);
  578. +        }
  579. +        else
  580. +          lpdbg("websiteevent","login : simple case : already logged in => doing nothing");
  581. +      }
  582. +      else if (username!="" && keyhex!="")
  583. +      {
  584. +        // Normal login case or Webroot login case
  585. +        var loginnow = false;
  586. +        
  587.          keybin    = lp_hex2bin(keyhex);
  588. -        keyhexold = lp_bin2hex(lp_local_key);
  589. -        if (lploggedin && lpusername==wxusername && keyhexold==keyhex)
  590. -        {
  591. -          lpdbg("websiteevent","keyweb2plug : already logged in...doing nothing");
  592. -        }
  593. -        else if (lploggedin && lpusername==wxusername)
  594. -        {
  595. -          lpdbg("websiteevent","keyweb2plug : already logged in...updating key from oldkey="+keyhexold+" to newkey="+keyhex);
  596. -          CHANGEKEY(keybin);
  597. -        }
  598. -        else
  599. -        {
  600. -          if (lploggedin && lpusername!="")
  601. -          {
  602. -            lpdbg("websiteevent","keyweb2plug : logged in as different user...logging off, then logging in");
  603. -            lplogoff();
  604. -          }
  605. -          else
  606. -            lpdbg("websiteevent","keyweb2plug : not logged in as any user...logging in");
  607. -          
  608. +        keyhexold = lp_bin2hex(lp_local_key?lp_local_key:"");
  609. +        if (lploggedin && lpusername==username && keyhexold==keyhex)
  610. +        {
  611. +          lpdbg("websiteevent","login : already logged in => doing nothing");
  612. +        }
  613. +        else if (lploggedin && lpusername==username)
  614. +        {
  615. +          lpdbg("websiteevent","login : already logged in but with different key => updating key from oldkey="+keyhexold+" to newkey="+keyhex);
  616.            CHANGEKEY(keybin);
  617.            lpWriteKeyFile();
  618. -          lp_logincheckhelper(true,null,wxusername,wxhash);
  619. +        }
  620. +        else if (lploggedin && lpusername!="")
  621. +        {
  622. +          lpdbg("websiteevent","login : already logged in as different user => logging off, then logging in");
  623. +          lplogoff();
  624. +          loginnow = true;
  625. +        }
  626. +        else if (lploggedin && lpusername=="")
  627. +        {
  628. +          lpdbg("error","login invalid state A");
  629. +          lpReportError("login invalid state A");
  630. +        }
  631. +        else if (!lploggedin && lpusername!="")
  632. +        {
  633. +          lpdbg("error","login invalid state B");
  634. +          lpReportError("login invalid state B");
  635. +        }
  636. +        else
  637. +          loginnow = true;
  638. +        
  639. +        if (loginnow)
  640. +        {
  641. +          // If we reach here, then we're currently logged out and must try to login
  642. +          
  643. +          // Set the key
  644. +          // - a successful login check will use this key instead of the one from the keyfile
  645. +          // - we can't use the one in the keyfile because we can never decrypt it because the website login is a manual login and so therefore blows away our session and returns a new pwdeckey
  646. +          // - note that for the same reason, we can't write the keyfile here...we dont have the correct pwdeckey to use to encrypt it
  647. +          
  648. +          if (wxhash!="")
  649. +          {
  650. +            // Webroot case - we get passed wxhash
  651. +            // - NOTE: forwarding wxhash to login_check causes our session to be recreated
  652. +            lpdbg("websiteevent","login : not logged in => setting key and trying login_check : webroot case");
  653. +            //lp_logincheckhelper(true,null,username,wxhash);
  654. +          }
  655. +          else
  656. +          {
  657. +            // Non-webroot case - we dont get passed wxhash
  658. +            lpdbg("websiteevent","login : not logged in => setting key and trying login_check : normal case");
  659. +          }
  660. +          CHANGEKEY(keybin);
  661. +          LP.lplogincheck(true);
  662.          }
  663.        }
  664.        else
  665.        {
  666. -        if (!lploggedin)
  667. -          LP.lplogincheck(true);
  668. +        lpdbg("error","login invalid params. username="+username+" wxhash="+wxhash+" keyhex="+keyhex);
  669. +        lpReportError("login invalid params  username="+username+" wxhash="+wxhash+" keyhex=xxx");
  670.        }
  671.        break;
  672.  
  673. @@ -535,34 +588,28 @@
  674.        lprsa_decrypt(eventtype,doc);
  675.        break;
  676.  
  677. -    case "keyweb2plug": // whenever the website needs to send the user's encryption key to the plugin .. only two cases i can think of are login via website and changed password
  678. -      var eventdata1 = doc.getElementById('eventdata1'); // user's local encryption key
  679. -      var eventdata2 = doc.getElementById('eventdata2'); // user's username
  680. -      var eventdata3 = doc.getElementById('eventdata3'); // 2=>rsa changed
  681. -      if(eventdata1&&eventdata2){
  682. -        
  683. -        if(eventdata3 && eventdata3.value == '2') {
  684. -          lprsa_userchangedpassword();
  685. -          CHANGEKEY(lp_hex2bin(eventdata1.value));
  686. -          lpWriteKeyFile();
  687. -        }
  688. -        else if(lpusername!=""&&eventdata2.value!=lpusername)
  689. -        {
  690. -          if (eventdata3.value == '1') {
  691. -            CHANGEKEY(lp_hex2bin(eventdata1.value));
  692. -            lpWriteKeyFile();
  693. -            LP.lplogincheck(true);
  694. -          }
  695. -          else
  696. -          {
  697. -            //lpdbg("websiteevent","keyweb2plug : logging off");
  698. -            lplogoff();
  699. -          }
  700. -        }else{
  701. -          //lpdbg("websiteevent","keyweb2plug : same username => updating key");
  702. -          CHANGEKEY(lp_hex2bin(eventdata1.value));
  703. -          lpWriteKeyFile();
  704. -        }
  705. +    case "keyweb2plug":
  706. +      var localkey = data1;
  707. +      var username = data2.toLowerCase().replace(/\s*/g,'');
  708. +      var cmd      = data3;
  709. +      if (username=="" || localkey=="")
  710. +      {
  711. +        lpdbg("error","keyweb2plug invalid params.  cmd="+cmd+" username="+username+" localkey="+localkey);
  712. +        lpReportError("keyweb2plug invalid params cmd="+cmd+" username="+username+" localkey=xxx");
  713. +      }
  714. +      else if (cmd=="2")
  715. +      {
  716. +        // username or password change
  717. +        // - we're resetting the key but not the user's username, is that ok?
  718. +        lpdbg("websiteevent","keyweb2plug : username or password change for username="+username+" => resetting key");
  719. +        lprsa_userchangedpassword();
  720. +        CHANGEKEY(lp_hex2bin(eventdata1.value));
  721. +        lpWriteKeyFile(); // this does nothing if we're not logged in
  722. +      }
  723. +      else
  724. +      {
  725. +        // BACKWARDS COMPATIBLITY (see saveKey()) - do nothing...we now handle everything in 'login'
  726. +        //lpdbg("websiteevent","keyweb2plug : backwards compatibility: do nothing");
  727.        }
  728.        break;
  729.  
  730. @@ -4626,7 +4673,11 @@
  731.  function lpWriteKeyFile()
  732.  {
  733.    var key = lp_bin2hex(lp_local_key);
  734. -  if (typeof(lppwdeckey) != 'undefined' && lppwdeckey != null) {
  735. +  if (typeof(lppwdeckey)!='undefined' && lppwdeckey!=null && lppwdeckey!="" &&
  736. +      typeof(lpusername)!="undefined" && lpusername!=null && lpusername!="" &&
  737. +      typeof(lpusername_hash)!="undefined" && lpusername_hash!=null && lpusername_hash!="")
  738. +  {
  739. +    //lpdbg("login","writing keyfile using lppwdeckeyhex="+lp_bin2hex(lppwdeckey));
  740.      var keydata = LPAES.Encrypt({pass:lppwdeckey, data:key, b64:true, mode:"ecb", bits:256});
  741.      var verificationdata = LPAES.Encrypt({pass:lp_local_key, data:"lastpass rocks", b64:true, mode:"ecb", bits:256});
  742.      lpWriteFile(lpusername_hash+"_lp.act.lps", keydata+"\n"+verificationdata);
  743. @@ -7354,7 +7405,7 @@
  744.  
  745.  this.lpPopulateAccounts = function(req, ignorestatus, local)
  746.  {
  747. -  lpdbg("login","lpPopulateAccounts local="+local);
  748. +  //lpdbg("login","lpPopulateAccounts local="+local);
  749.  
  750.    var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  751.           .getService(Components.interfaces.nsIWindowMediator);
  752.  
  753. changeset:   14945:1bc2c282b23d
  754. user:        sameer <sameer@lastpass.com>
  755. date:        Thu Sep 24 16:58:04 2009 -0400
  756. files:       firefox/content/comm.js firefox/content/lastpass.js firefox/content/loginlogic.js
  757. description:
  758. do the offline login even before we do the http test so that if the http test hangs cuz we're down,
  759. the user can still access his data
  760.  
  761. - moved/modified the httptest functions to loginlogic.js
  762. - reset our loggedinoffline flag on logoff
  763.  
  764.  
  765. diff -r 06b507607897 -r 1bc2c282b23d firefox/content/lastpass.js
  766. --- a/firefox/content/lastpass.js    Thu Sep 24 15:01:36 2009 -0400
  767. +++ b/firefox/content/lastpass.js    Thu Sep 24 16:58:04 2009 -0400
  768. @@ -4444,6 +4444,7 @@
  769.    fix_toolbar_mode();
  770.    LP.lphelpstats = null;
  771.    lppd = 0;
  772. +  lploggedinoffline = false;
  773.  
  774.    // Give the logout request a chance to start, then kill the session ID
  775.    lp_phpsessid='';
  776.  
  777. changeset:   14943:55e5807f87dd
  778. user:        sameer <sameer@lastpass.com>
  779. date:        Thu Sep 24 14:02:40 2009 -0400
  780. files:       firefox/Makefile firefox/content/lastpass.js firefox/content/loginlogic.php firefox/content/vars.js
  781. description:
  782. FF login changes to do offline login before we issue any network requests
  783.  
  784. - i still have to do a lot more testing cuz bunch of stuff changed and it touches lots of critical paths, but looks good initially
  785. - httptest also has to be changed as currently as we do that before we do the logincheck (since on browser start we can get the key from saved credentials)
  786. - we currently only notify the user that they are logged in offline AFTER login.php fails so if login.php hangs, the user
  787.   would obviously never be notified....will see if changing it causes the notification bar "bounce" making it ugly...
  788. - i also still have to implement the xmlhttp timeout functionaltiy.
  789.   took a quick look at it and there isn't an explicit timeout parameter you can pass.
  790.   you have to use a setTimeout to determine if a request has hung and if so, call abort()
  791.  
  792. works as follows:
  793.  
  794. (this was never happening before)
  795. whenever something calls lplogincheck() we try to do an immediate offline login.
  796. to do an offline login, we need the user's key...sometimes the user is already logged in and we have it.
  797. if we dont have it, then we try to get it from the user's saved credentials - this is important as it
  798. handles the high freq case of the user simply starting up their browser.
  799. after offline login, we do a login_check login.  if that fails, we do a login.php login.
  800.  
  801. (this was happening before)
  802. when somethign calls lplogin() directly, then we again do an immediate offline login
  803. before issueing a request to login.php
  804.  
  805. for the yubikey/sesame case, we don't do the offline login first and continue to do things
  806. as we did them yesterday.  after finishing stuff, i'll revisit this and see how easy of a change
  807. it would be VS confusing for users. it would involve changing sesame and making it slightly less
  808. secure as currently sesame has a separate offline and online password, whereas yubikey sends
  809. your offline password in the clear via keystrokes and to our servers.
  810.  
  811. - pulled all login logic out to a new file loginlock.php
  812. - revamped/rewrote the login handlers to handle offline first then online
  813. - split up logincheckhandler and loginhandler
  814. - fixed a bunch of issues where we'd show the incorrect (or no) notification bar on failures
  815.  
  816.  
  817. diff -r d696761758f7 -r 55e5807f87dd firefox/content/lastpass.js
  818. --- a/firefox/content/lastpass.js    Thu Sep 24 13:19:19 2009 -0400
  819. +++ b/firefox/content/lastpass.js    Thu Sep 24 14:02:40 2009 -0400
  820. @@ -4341,27 +4341,6 @@
  821.      e.returnValue = false;
  822.  }
  823.  
  824. -this.lplogin=function(username, password, interactive)
  825. -{
  826. -  LP.lpCloseNotifications();
  827. -  LP.mostRecent().setTimeout( 
  828. -    (function(){
  829. -       lp_loginhelper(username, password, interactive);
  830. -       password='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
  831. -    }),  100);
  832. -  // try to flush from ememory
  833. -}
  834. -
  835. -this.logincheck = function(sessionid)
  836. -{
  837. -  LP.lplogincheck(false, sessionid);
  838. -}
  839. -
  840. -this.lplogincheck = function(fromwebsite)
  841. -{
  842. -  LP.mostRecent().setTimeout( (function(){lp_logincheckhelper(fromwebsite);}),  100);
  843. -}
  844. -
  845.  function lpcheckcookies(){
  846.    try{
  847.      var cb = LP.lpmainprefs.getIntPref("network.cookie.cookieBehavior");
  848. @@ -4600,85 +4579,6 @@
  849.    }
  850.  }
  851.  
  852. -function lp_loginhelper(username, lppassword, interactive)
  853. -{
  854. -  lpSetupXHRIntercepts();
  855. -
  856. -  lpusername      = username.toLowerCase().replace(/\s*/g, '');
  857. -  lpusername_hash = lp_sha256(lpusername);
  858. -  lphash          = lp_sha256(lp_sha256(lpusername+lppassword) + lppassword);
  859. -  fix_toolbar_mode();
  860. -  CHANGEKEY(lp_hex2bin(lp_sha256(lpusername+lppassword)));
  861. -
  862. -
  863. -  //login override - leave this comment
  864. -
  865. -
  866. -  // try to kill the memory locations with passwords -- the few lines above used it a few times....
  867. -  lppassword='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
  868. -  lppassword='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
  869. -
  870. -  LP.lp_handle_buttons_all('loggingin');
  871. -
  872. -  // Do the local file login here; we have the username+password key so it makes sense if we have it....
  873. -  // don't show the offline error, wait for our actual network request to do that.
  874. -  // set server_accts_version to -1 to make sure that we don't attempt a network refresh immediately.
  875. -  //lp_server_accts_version = -1;
  876. -  //lpLoginErrorHandler(lpusername, false);
  877. -    
  878. -  var postdata="xml=2&username="+LP.en(lpusername)+"&method=ff&hash="+lphash+"&version="+LP.en(lpversion);
  879. -  postdata += "&hp=" + (LP.IsHomePage() ? "1" : "0");
  880. -  postdata += "&encrypted_username=" + LP.en(lpenc(lpusername));
  881. -
  882. -  // Cache this data in case we have to reissue the login request for yubikey/sesame
  883. -  sesame_cleardata();
  884. -  sesame_setdata("postdata",postdata);
  885. -  sesame_setdata("interactive",interactive);
  886. -  yubikey_cleardata();
  887. -  yubikey_setdata("postdata",postdata);
  888. -  yubikey_setdata("interactive",interactive);
  889. -  postdata += "&otp=";
  890. -  postdata += "&sesameotp=";
  891. -
  892. -  //Using a locally stored OTP as an account recovery option.
  893. -  //Send up some data to ensure local data remains in sync with
  894. -  //server data (eg, if pw is changed on diff machine
  895. -  if(LP.lpdolostpwotp && (!LP.lpprefsHasUserValue("StoreLostPWOTP") || LP.lpprefsGetBoolPref("StoreLostPWOTP"))){
  896. -    postdata += "&lostpwotphash=" + LP.en(LP.GetOTPHash());
  897. -  }else{
  898. -    //Make sure we do not have a OTP stored 
  899. -    LP.DeleteOTP();
  900. -  }
  901. -
  902. -  lpdbg("login","Issuing request to login.php");
  903. -  LP.lpMakeRequest(LP.lp_base + 'login.php', postdata, lpLoginResponse, function() { lpLoginErrorHandler(lpusername, true); }, interactive ? "interactive":0);
  904. -}
  905. -
  906. -function lp_logincheckhelper(fromwebsite, sessionid, wxusername, wxhash)
  907. -{
  908. -  lpSetupXHRIntercepts();
  909. -
  910. -  yubikey_cleardata();
  911. -  sesame_cleardata();
  912. -  
  913. -  var postdata = "version="+LP.en(lpversion)+"&method=ff";
  914. -  if(sessionid)
  915. -    postdata += "&sessionid="+LP.en(sessionid);
  916. -  postdata += "&hp=" + (LP.IsHomePage() ? "1" : "0");
  917. -
  918. -  if (wxusername)
  919. -    postdata += "&wxusername=" + LP.en(wxusername);
  920. -  if (wxhash)
  921. -    postdata += "&wxhash=" + LP.en(wxhash);
  922. -  
  923. -  if (!lploggedin) {
  924. -    LP.lp_handle_buttons_all('loggingin');
  925. -  }
  926. -  
  927. -  lpdbg("login","Issuing request to login_check.php");
  928. -  LP.lpMakeRequest(LP.lp_base + 'login_check.php', postdata, lpLoginResponse, lpLoginCheckErrorHandler, fromwebsite);
  929. -}
  930. -
  931.  // All the user preferences are read upfront so that we don't have to read them 17000 times per page
  932.  // it's critical that this run in any path where the username changes
  933.  this.SetupUserPreferences=function() 
  934. @@ -4722,147 +4622,6 @@
  935.    LP.lpSetupIdleTimer();
  936.  }
  937.  
  938. -function lpLoginResponse(req, customErrorHandler, fromwebsite)
  939. -{
  940. -  try {
  941. -    if (req && req.readyState == 4 && typeof(customErrorHandler) == "function" && (req.status != 200 || req.responseXML == null || req.responseXML.documentElement == null)) {
  942. -lpdbg("error", "loginreponse failure running customErrorHandler");
  943. -      customErrorHandler();
  944. -      return;
  945. -    }
  946. -    LP.lpLoginResponse_win(req, fromwebsite);
  947. -
  948. -    if (req && req.readyState == 4 && lploggedin) {
  949. -      OnAllLogins();
  950. -      lppopulateaccountsfromlogin = true;
  951. -      lpGetAccountsLocal();
  952. -      if (!fromwebsite || 'interactive'==fromwebsite)
  953. -        lprefreshwindows();
  954. -
  955. -      var currtime = lp_get_gmt_timestamp();
  956. -      LP.lpprefsSetIntPref('lastpollcheck', currtime);
  957. -      LP.flush_prefs();
  958. -      lastpoll = currtime;
  959. -      if (LP.lpdopoll) {
  960. -        LP.setupPollTimer();
  961. -      }
  962. -
  963. -      if(login_from_welcome){
  964. -        login_from_welcome = false;
  965. -        loginOkAfterCreate();
  966. -      } else {
  967. -        // doubly used fromwebsite (it's a customParam for makeRequest)
  968. -        // If we have an interactive login -- launch our home page
  969. -        if('interactive'==fromwebsite)
  970. -          if(!LP.lpprefsHasUserValue("showHomepageAfterLogin", false) || LP.lpprefsGetBoolPref("showHomepageAfterLogin", false)==true)
  971. -            launchHomeIf();
  972. -      }
  973. -      
  974. -      // Only do local icons if we have xpcom
  975. -      if (lpusexpcomencrypt())
  976. -      {
  977. -        var versionff = lpgeticonsversion();
  978. -        if (versionff=="")
  979. -          versionff = "0";
  980. -        //lplog("Making a geticons request with version=" + versionff);
  981. -        LP.lpMakeRequest(LP.lp_base+"geticon.php","versionff="+LP.en(versionff),lpIconsResponse);
  982. -      }
  983. -      
  984. -      LP.lpretryrequests();
  985. -    }
  986. -  } catch (e) {
  987. -    lpReportError("Failure in lpLoginResponse: " + e+ " ln: " + e.lineNumber);
  988. -  }
  989. -}
  990. -
  991. -function lpLoginErrorHandler(username, showoffline)
  992. -{
  993. -  lpdbg("login","Trying to login offline");
  994. -  
  995. -  // Blow away depreceated stuff
  996. -  lpDeleteFile(username + "_lp.act.xml");
  997. -  lpDeleteFile(username + "_lps.act.xml");
  998. -   
  999. -  // Read key file
  1000. -  var username_hash = lp_sha256(username);
  1001. -  lpRenameFile(username_hash + "_lp.key", username_hash + "_lp.act.key");
  1002. -  lpRenameFile(username_hash + "_lp.act.key", username_hash + "_lp.act.lps");
  1003. -  var data = lpReadFile(username_hash + "_lp.act.lps");
  1004. -  if (data) {
  1005. -    var splitdata=data.split("\n");
  1006. -    if (splitdata.length == 2) {
  1007. -      var verificationdata = lpdec(splitdata[1], lp_local_key, true);
  1008. -      if (verificationdata == "lastpass rocks")
  1009. -      {
  1010. -        // Read and decrypt accounts file
  1011. -        var data = load_accounts_file(username_hash,true,false)
  1012. -        
  1013. -        // Determine if the file is encrypted.
  1014. -        // - If yes, then ask the user for the password and set it so that it will be used to decrypt/encrypt all reads/writes to acount files moving forward
  1015. -        if (data.indexOf("type=sesameoffline\ndata=")==0)
  1016. -        {
  1017. -          lpdbg("sesame","Logging in offline and existing file is protected by sesameoffline => asking user for offline password");
  1018. -          var otp = "";
  1019. -          while (true)
  1020. -          {
  1021. -            otp = sesame_getotp(null);
  1022. -            if (otp=="" || otp.length!=64)
  1023. -            {
  1024. -              if (otp.length>64)
  1025. -              {
  1026. -                LP.alert(LP.lpgs("SesameWrongButton"));
  1027. -                continue;
  1028. -              }
  1029. -              lpdbg("sesame","User did not enter offline password - failing login");
  1030. -              lplogoff();
  1031. -              lpshowError("LoginError", false, true);
  1032. -              return;
  1033. -            }
  1034. -            break;
  1035. -          }
  1036. -          sesame_setdata("password_offline",otp);
  1037. -        }
  1038. -        else if (data.indexOf("type=yubikeyoffline\ndata=")==0)
  1039. -        {
  1040. -          lpdbg("yubikey","Logging in offline and existing file is protected by yubikeyoffline => asking user for offline password");
  1041. -          var otp = yubikey_getotp(null);
  1042. -          if (otp=="" || otp.length!=44)
  1043. -          {
  1044. -            lpdbg("yubikey","User did not enter offline OTP - failing login");
  1045. -            lplogoff();
  1046. -            lpshowError("LoginError", false, true);
  1047. -            return;
  1048. -          }
  1049. -          
  1050. -          var otp12 = otp.substring(0,12);
  1051. -          otp = lp_sha256(lp_sha256(lp_sha256(fix_username("LastPassIsGreat")+otp12) + otp12));
  1052. -          yubikey_setdata("password_offline",otp);
  1053. -        }
  1054. -      
  1055. -        LP.lp_handle_buttons_all('in');
  1056. -        var key = lp_local_key; // todo ??
  1057. -        LP.lpset(key,username);
  1058. -        lpGetAccountsLocal();
  1059. -        if(showoffline)
  1060. -          lp_showNotification('LoggedInOffline', null, 0, 'offline');
  1061. -        return;
  1062. -      }
  1063. -    }
  1064. -  }
  1065. -  if(showoffline) {
  1066. -    LP.lp_handle_buttons_all('off');
  1067. -    lpshowError("ErrorLoginMsg");
  1068. -  }
  1069. -}
  1070. -
  1071. -function lpLoginCheckErrorHandler()
  1072. -{
  1073. -  lpdbg("login","Request to login_check.php failed -> trying login.php");
  1074. -  LP.lp_handle_buttons_all('off');
  1075. -  lpshowError("ErrorLoginMsg");
  1076. -  lp_login_from_saved();
  1077. -}
  1078. -
  1079.  function lpWriteKeyFile()
  1080.  {
  1081.    var key = lp_bin2hex(lp_local_key);
  1082. @@ -4874,322 +4633,6 @@
  1083.    }
  1084.  }
  1085.  
  1086. -this.lpLoginResponse_win=function(req, fromwebsite)
  1087. -{
  1088. -  if (!req)
  1089. -    return;
  1090. -
  1091. -  if (req.readyState==4)
  1092. -  {
  1093. -    if (req.status==200 && req.responseXML!=null && req.responseXML.documentElement!=null)
  1094. -    {
  1095. -      var resp    = req.responseXML.documentElement;
  1096. -      var ok      = resp.getElementsByTagName('ok');
  1097. -      var loginok = true;
  1098. -      var silent = false;
  1099. -      if (ok.length>0)
  1100. -      {
  1101. -        // CASE: process response from login_check.php or login.php
  1102. -        
  1103. -        lppwdeckey         = lp_hex2bin(lp_sha256(ok[0].getAttribute('pwdeckey')));
  1104. -        lpusername         = ok[0].getAttribute('lpusername');
  1105. -        lpusername_hash       = lp_sha256(lpusername);
  1106. -        lpuid              = ok[0].getAttribute('uid');
  1107. -
  1108. -        // NOTE: For now, dont worry about using otpsecretkey to encrypt/decrypt as we instead rely on disableoffline -- this makes things more secure and greatly simplifies things
  1109. -        //sesame_setdata("password_online", ok[0].getAttribute('otpsecretkey'));    // use to encrypt & decrypt sesameonline
  1110. -        //yubikey_setdata("password_online",ok[0].getAttribute('otpsecretkey'));    // use to encrypt & decrypt yubikeyonline
  1111. -        sesame_setdata("password_offline", ok[0].getAttribute('sesamepassword')); // use to encrypt & decrypt sesameoffline
  1112. -        yubikey_setdata("password_offline",ok[0].getAttribute('yubikeyhash'));    // use to encrypt & decrypt yubikeyoffline
  1113. -        
  1114. -        lpdisableoffline = ok[0].getAttribute('disableoffline')==1 ? 1 : 0;
  1115. -        if (lpdisableoffline)
  1116. -        {
  1117. -          lpdbg("disableoffline","enabled => clearing sensitive files");
  1118. -          LP.lpClearCache(true,false,true);
  1119. -        }
  1120. -         
  1121. -        fix_toolbar_mode();
  1122. -        
  1123. -        lprsa_setprivatekeyenchash(ok);
  1124. -
  1125. -        LP.lphelpstats = new lpobjhelpstats();
  1126. -        LP.lphelpstats.currentlyopen=false;
  1127. -        LP.lphelpstats.wino=null;
  1128. -        LP.lphelpstats.highlighthelp=(ok[0].getAttribute('hih')=="1"?true:false);
  1129. -        LP.lphelpstats.genpwhelp=(ok[0].getAttribute('genh')=="1"?true:false);
  1130. -        LP.lphelpstats.addsitehelp=(ok[0].getAttribute('addh')=="1"?true:false);
  1131. -
  1132. -        set_secprompts(ok[0], 'login');
  1133. -
  1134. -        countryfromip = ok[0].getAttribute('country');
  1135. -        lpbUpdateAvailable = (ok[0].getAttribute('upgrade')=="1"?true:false);
  1136. -        logoff_other_ses = (ok[0].getAttribute('logoff_other_ses')=="1"?true:false);
  1137. -
  1138. -        //There is some duplication here if multiple firefox windows are open
  1139. -
  1140. -        //Key management stuff...
  1141. -        if (""==lp_local_key)
  1142. -        {
  1143. -          // CASE: login_check.php => if we can't get the key from our local file, call lp_login_from_saved()
  1144. -          
  1145. -          // Get key from local file.
  1146. -          if (!fromwebsite && LP.lpprefsHasUserValue('logOffWhenCloseBrowser') && LP.lpprefsGetBoolPref('logOffWhenCloseBrowser')) {
  1147. -            var lastpollcheck = LP.lpprefsHasUserValue('lastpollcheck') ? LP.lpprefsGetIntPref('lastpollcheck') : 0;
  1148. -            var logOffWhenCloseBrowserVal = LP.lpprefsHasUserValue('logOffWhenCloseBrowserVal') ? LP.lpprefsGetIntPref('logOffWhenCloseBrowserVal') : 0;
  1149. -            var timesincelastpollcheck = lp_get_gmt_timestamp() - lastpollcheck;
  1150. -            if (timesincelastpollcheck >= logOffWhenCloseBrowserVal * 60) {
  1151. -              loginok = false;
  1152. -              silent = true;
  1153. -              lplogoff();
  1154. -            }
  1155. -          }
  1156. -          var data = null;
  1157. -          if (loginok) {
  1158. -            lpRenameFile(lpusername_hash + "_lp.key", lpusername_hash + "_lp.act.key");
  1159. -            lpRenameFile(lpusername_hash + "_lp.act.key", lpusername_hash + "_lp.act.lps");
  1160. -            data            = lpReadFile(lpusername_hash+"_lp.act.lps");
  1161. -            if (!data)
  1162. -            {
  1163. -              data = lpReadFile(lpusername+"_lp.key");
  1164. -              if (data){
  1165. -                lpRenameFile(lpusername+"_lp.key",lpusername_hash+"_lp.act.lps");
  1166. -              }
  1167. -            }
  1168. -            if (data==false)
  1169. -              loginok = false;
  1170. -          }
  1171. -          if (loginok)
  1172. -          {
  1173. -            var splitdata=data.split("\n");
  1174. -            if (splitdata.length!=2)
  1175. -              loginok = false;
  1176. -            if (loginok)
  1177. -            {
  1178. -              var key              = lp_hex2bin(lpdec(splitdata[0], lppwdeckey, true));
  1179. -              var verificationdata = lpdec(splitdata[1], key, true);
  1180. -              if (verificationdata=="lastpass rocks")
  1181. -                CHANGEKEY(key);
  1182. -              else
  1183. -                loginok = false;
  1184. -            }
  1185. -          }
  1186. -          if (!loginok)
  1187. -          {
  1188. -              LP.lp_handle_buttons_all('off');
  1189. -            if (!silent) {
  1190. -              lpshowError("LoginError",false,true);
  1191. -            }
  1192. -            lp_login_from_saved();
  1193. -            return;
  1194. -          }
  1195. -        }
  1196. -        else
  1197. -        {
  1198. -          // CASE: login.php => if we can't get the key from our local file, call lp_login_from_saved()
  1199. -          
  1200. -          //Save the encrypted key to a file
  1201. -          lpWriteKeyFile();
  1202. -        }
  1203. -        
  1204. -        if (loginok)
  1205. -          lprsa_login(fromwebsite,ok);
  1206. -        
  1207. -
  1208. -        //Prompt existing users if they want to use OTP Account Recovery.
  1209. -        //Defaults to yes for new users
  1210. -        if(LP.lpdolostpwotp && ok[0].hasAttribute('lostpwotpresult')){
  1211. -          var localdatapresent = lpFileExists(lpusername_hash+"_lps.act.xml");
  1212. -          if(localdatapresent && !LP.lpprefsHasUserValue("StoreLostPWOTP")){
  1213. -//            if (LP.lpConfirmYesNo(LP.lpgs('ExistingUsersOTPPrompt'))) {
  1214. -              LP.lpprefsSetBoolPref("StoreLostPWOTP", true);
  1215. -//            }else{
  1216. -//              LP.lpprefsSetBoolPref("StoreLostPWOTP", false);
  1217. -//            }
  1218. -          }else if(!LP.lpprefsHasUserValue("StoreLostPWOTP")){
  1219. -            LP.lpprefsSetBoolPref("StoreLostPWOTP", true);
  1220. -          }
  1221. -        }
  1222. -
  1223. -        //check account recovery otp
  1224. -        if(LP.lpdolostpwotp && (!LP.lpprefsHasUserValue("StoreLostPWOTP") || LP.lpprefsGetBoolPref("StoreLostPWOTP"))){
  1225. -          if(ok[0].hasAttribute('lostpwotpresult') && ok[0].getAttribute('lostpwotpresult')!="ok"){
  1226. -            LP.DeleteOTP();
  1227. -            LP.MakeOTP();
  1228. -          }
  1229. -        }
  1230. -
  1231. -
  1232. -        //Remove all lastpass login notifications
  1233. -        LP.lpCloseNotifications("login");
  1234. -
  1235. -        lploggedin       = true;
  1236. -        lploggedincached = false;
  1237. -        lpisadmin        = parseInt(ok[0].getAttribute('isadmin')) == 1;
  1238. -        lploglogins      = parseInt(ok[0].getAttribute('loglogins')) == 1;
  1239. -        lpemail          = ok[0].getAttribute('email');
  1240. -        lp_local_accts_version  = -1;
  1241. -        lp_server_accts_version = parseInt(ok[0].getAttribute('accts_version'));
  1242. -        LP.lp_handle_buttons_all('in');
  1243. -
  1244. -        lp_phpsessid = lp_get_phpsessid();
  1245. -        var newsessid = ok[0].getAttribute('sessionid');
  1246. -        if(lp_phpsessid!=newsessid && newsessid!='') {
  1247. -          lpdbg("cookie", "New sessid: " + newsessid + " dropping old: " + lp_phpsessid);
  1248. -          lp_phpsessid = newsessid;
  1249. -        }
  1250. -
  1251. -        if (loginok && ok[0].getAttribute('namedpipes_donotsendlogin')!="1")
  1252. -        {
  1253. -          ok[0].setAttribute("namedpipes_donotsendlogin","1");
  1254. -          lpnp_sendall("login",{sessionid:newsessid,localkeyhex:lp_bin2hex(lp_local_key)});
  1255. -        }
  1256. -        
  1257. -        try{
  1258. -          var ignoreminor = (ok[0].getAttribute('ignoreminor')=="0" ? false : true);
  1259. -          var reqdversion = ok[0].getAttribute('reqdversion');
  1260. -          if(lpversion!="" && reqdversion!="" && CompareLastPassVersions(lpversion, reqdversion, ignoreminor) < 0){
  1261. -        lpdbg("state", "Update required: reqdversion " + reqdversion + " lpversion : " + lpversion + " ignoreminor: " + ignoreminor);
  1262. -            LP.alert(LP.lpgs("A required update is available for LastPass. Please press OK to begin download and installation."));
  1263. -            LP.lpUpdate();
  1264. -          }
  1265. -        }catch(uperr){ 
  1266. -      lplog("Update failed to run: " + uperr); 
  1267. -    }
  1268. -      }
  1269. -      else
  1270. -      {
  1271. -        // CASE: server did not return "ok" for login or login_check
  1272. -        
  1273. -        var error  = resp.getElementsByTagName('error');
  1274. -        LP.lp_handle_buttons_all('off');
  1275. -        if (error.length>0){
  1276. -          if(error[0].hasAttribute('invalidsession')){
  1277. -            // CASE: login.php OR login_check.php
  1278. -            lpopen(LP.lp_base+"invalidsession.php", true);
  1279. -            lpshowError("LoginError", false, true);
  1280. -            lplogoff();
  1281. -            LP.lpClearCache(true,false,false);
  1282. -            return;
  1283. -          }else{
  1284. -            silent = parseInt(error[0].getAttribute('silent')) == 1;
  1285. -          }
  1286. -        }
  1287. -        if (!silent){
  1288. -        
  1289. -          if(req.responseText.indexOf("blacklist") > 0)
  1290. -          {
  1291. -            // CASE: login.php
  1292. -            LP.lpClearCache(true,false,false);
  1293. -            lplogoff();
  1294. -            lpshowError("Blacklist", false, true);
  1295. -          }
  1296. -          else if (req.responseText.indexOf("sesameotprequired") > 0)
  1297. -          {
  1298. -            // CASE: login.php
  1299. -            lpdbg("sesame","LOGIN RESPONSE: sesameotprequired => Asking user for OTP");
  1300. -            
  1301. -            // We know the user has internet connectivity and that sesame is enabled, so make sure we dont allow offline login via lpLoginErrorHandler if login.php fails
  1302. -            // We do this to simplify things...it avoids the possibility of double prompting the user for the sesame otp to get the offline password
  1303. -            LP.lpClearCache(true,false,false);
  1304. -            
  1305. -            var otp = sesame_getotp(lpusername);
  1306. -            if (otp=="")
  1307. -            {
  1308. -              lpdbg("sesame","User did not enter OTP - failing login");
  1309. -              lplogoff();
  1310. -              lpshowError("LoginError", false, true);
  1311. -              return;
  1312. -            }
  1313. -            lpdbg("sesame","User entered sesameotp="+otp+" -- REISSUING LOGIN REQUEST");
  1314. -            
  1315. -            var postdata    = sesame_getdata("postdata") + "&sesameotp="+encodeURIComponent(otp);
  1316. -            var interactive = sesame_getdata("interactive");
  1317. -            LP.lpMakeRequest(LP.lp_base + 'login.php', postdata, lpLoginResponse, function() { lpLoginErrorHandler(lpusername, true); }, interactive ? "interactive":0);
  1318. -            return;
  1319. -          }
  1320. -          else if (req.responseText.indexOf("sesameotpfailed") > 0)
  1321. -          {
  1322. -            // CASE: login.php
  1323. -            lpdbg("sesame","LOGIN RESPONSE: sesameotpfailed");
  1324. -            LP.lpClearCache(true,false,false);
  1325. -            lplogoff();
  1326. -            lpshowError("LoginError", false, true);
  1327. -            return;
  1328. -          }
  1329. -          else if (req.responseText.indexOf("otprequired") > 0)
  1330. -          {
  1331. -            // CASE: login.php
  1332. -            
  1333. -            // We know the user has internet connectivity and that yubikey is enabled, so make sure we dont allow offline login via lpLoginErrorHandler if login.php fails
  1334. -            // We do this to simplify things...it avoids the possibility of double prompting the user for the yubikey otp to get the offline password
  1335. -            LP.lpClearCache(true,false,false);
  1336. -            
  1337. -            lpdbg("yubikey","LOGIN RESPONSE: otprequired => Asking user for OTP");
  1338. -            var otp = yubikey_getotp(lpusername);
  1339. -            if (otp=="")
  1340. -            {
  1341. -              lpdbg("yubikey","User did not enter OTP - failing login");
  1342. -              lplogoff();
  1343. -              lpshowError("LoginError", false, true);
  1344. -              return;
  1345. -            }
  1346. -            lpdbg("yubikey","User entered yubikeyotp="+otp+" -- REISSUING LOGIN REQUEST");
  1347. -            
  1348. -            var postdata    = yubikey_getdata("postdata") + "&otp="+encodeURIComponent(otp);
  1349. -            var interactive = yubikey_getdata("interactive");
  1350. -            LP.lpMakeRequest(LP.lp_base + 'login.php', postdata, lpLoginResponse, function() { lpLoginErrorHandler(lpusername, true); }, interactive ? "interactive":0);
  1351. -            return;
  1352. -          }
  1353. -          else if (req.responseText.indexOf("otpfailed") > 0)
  1354. -          {
  1355. -            // CASE: login.php
  1356. -            lpdbg("yubikey","LOGIN RESPONSE: otpfailed");
  1357. -            LP.lpClearCache(true,false,false);
  1358. -            lplogoff();
  1359. -            lpshowError("LoginError", false, true);
  1360. -            return;
  1361. -          }
  1362. -          // I see this in IE but not in FF...not sure if it's supposed to be added or not...
  1363. -          //else if (req.responseText.indexOf("trialexpired") > 0)
  1364. -          //{
  1365. -          //}
  1366. -          else
  1367. -          {
  1368. -            // CASE: login.php or login_check.php is returning an invalid response
  1369. -            //  "unknownemail" is returned from login.php, not from login_check.php
  1370. -            var showcreate = error.length > 0 && error[0].getAttribute('cause') && error[0].getAttribute('cause') == 'unknownemail';
  1371. -            lpshowError(error.length > 0 && error[0].getAttribute('message') ? error[0].getAttribute('message') : "LoginError", false, true, showcreate);
  1372. -            
  1373. -            // Not sure what's best to do here...we've gotten junk back from login_check.php or login.php meaning that the user doesn't have a valid session
  1374. -            // Should we try to log in offline?
  1375. -          }
  1376. -        }
  1377. -        else
  1378. -        {
  1379. -          // CASE: login_check.php returns <response><error silent=\"1\"/></response> => Call lp_login_from_saved to force a real login.php request
  1380. -          
  1381. -          // && !LP.lpprefsHasUserValue('ffimportdone') && !LP.lpprefsHasUserValue('ffimportdone', false)
  1382. -          if (!LP.lpprefsHasUserValue('ffhasloggedin', false)) {
  1383. -            LP.lpprefsSetBoolPref('ffhasloggedin', true, false);
  1384. -            LP.flush_prefs();
  1385. -
  1386. -            if(!lphidewelcome)
  1387. -              LP.OpenCreateAccount();
  1388. -          }
  1389. -
  1390. -          lp_login_from_saved();
  1391. -        }
  1392. -      }
  1393. -    } else {
  1394. -      LP.lp_handle_buttons_all('off');
  1395. -      var msg = "Problem with login response. status=" + req.status + " text= " + req.responseText;
  1396. -      lpReportError(msg, null);
  1397. -      lpshowError("ErrorLoginMsg");
  1398. -    }
  1399. -  }
  1400. -}
  1401. -
  1402.  function CompareLastPassVersions(a, b, ignoreminor){
  1403.  
  1404.    var amajor = 0, aminor = 0, arev = 0;
  1405. @@ -7505,30 +6948,6 @@
  1406.    lpopen(url);
  1407.  }
  1408.  
  1409. -this.lpOpenLogin=function(action,sesameusername)
  1410. -{
  1411. -  var aA = {logincase:1};
  1412. -  if (typeof(sesameusername)!="undefined" && sesameusername!=null && sesameusername!="")
  1413. -    aA.sesameusername = sesameusername;
  1414. -
  1415. -  if(lploggedin)
  1416. -    lplogoff();
  1417. -  else{
  1418. -    //if(lpcheckcookies()==false){
  1419. -    //  LP.lpalert_ex(LP.lpgs('LastPass cannot login until cookies are allowed from lastpass.com'));
  1420. -    //  return;
  1421. -    //}
  1422. -    if(action && typeof(action)=="function")
  1423. -      lpdelayedFunction = action;
  1424. -    else
  1425. -      lpdelayedFunction = null;
  1426. -    lpdbg("xulshow","lpOpenLogin opening dialog=login.xul");      
  1427. -    //This variable gets replaced
  1428. -    var mainloginxul = "content/login.xul";
  1429. -    LP.lpGetCurrentWindow().openDialog(lpchrome_base + mainloginxul, '_blank', 'chrome,titlebar,toolbar,centerscreen,modal',aA);
  1430. -  }
  1431. -}
  1432. -
  1433.  this.lpCloseNotifications=function(type)
  1434.  {
  1435.    var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  1436. @@ -9891,14 +9310,6 @@
  1437.    return id;
  1438.  }
  1439.  
  1440. -function lp_lpOpenLoginHelper(notification, description)
  1441. -{
  1442. -  //Need this close so that multiple login failures show up.
  1443. -  //notification.close();
  1444. -  if (!lploggedin)
  1445. -    LP.lpGetCurrentWindow().setTimeout(function() { if (!lploggedin) LP.lpOpenLogin(notification.extra); }, 500);
  1446. -}
  1447. -
  1448.  function lp_neverShowLoginNotification(notification, description)
  1449.  {
  1450.    LP.lpprefsSetBoolPref('showLoginNotifications', false, false);
  1451. @@ -12546,70 +11957,6 @@
  1452.      LP.lpUpdateAllToolbars(bCompact);
  1453.  }
  1454.  
  1455. -function lp_get_loginusers(passedinuser)
  1456. -{
  1457. -  var loginusers = '';
  1458. -  if (LP.lpprefsHasUserValue('loginusers', false))
  1459. -    loginusers = LP.lpprefsGetCharPref('loginusers', false);
  1460. -  var users = new Array();
  1461. -  
  1462. -  var passedinuserencoded = encodeURIComponent(passedinuser);
  1463. -  if (typeof(passedinuser)!="undefined" && passedinuser!="" && loginusers.indexOf(passedinuserencoded)==-1)
  1464. -    loginusers = passedinuserencoded+"|"+loginusers;
  1465. -    
  1466. -  if (loginusers != '') {
  1467. -    users = loginusers.split('|');
  1468. -    for (var i = 0; i < users.length; i++)
  1469. -      users[i] = decodeURIComponent(users[i]);
  1470. -  }
  1471. -  return users;
  1472. -}
  1473. -
  1474. -function lp_get_loginpws()
  1475. -{
  1476. -  var loginpws = '';
  1477. -  if (LP.lpprefsHasUserValue('loginpws', false)) {
  1478. -    //lplog("Pulling loginpws prefs:  " + LP.lpprefsGetCharPref('loginpws', false));
  1479. -    loginpws = lp_unprotect_data(LP.lpprefsGetCharPref('loginpws', false))
  1480. -  }
  1481. -  var pws = new Array();
  1482. -  var pwmap = new Array();
  1483. -  if (loginpws != '') {
  1484. -    pws = loginpws.split('|');
  1485. -    for (var i = 0; i < pws.length; i++) {
  1486. -      var userpw = pws[i].split('=');
  1487. -      if(typeof(userpw[1])!="undefined") {
  1488. -        var user = decodeURIComponent(userpw[0]);
  1489. -        var pw = decodeURIComponent(userpw[1]);
  1490. -        var use_key = lp_hex2bin(lp_sha256(user));
  1491. -        pw = lpdec(pw, use_key);
  1492. -        //lplog("Setting up pwmap : "  + user +  " pw: " + pw);
  1493. -        pwmap[user] = pw;
  1494. -      } else {
  1495. -        lpdbg("error", "Failed to split up: " + pws[i]);
  1496. -      }
  1497. -    }
  1498. -  }
  1499. -  return pwmap;
  1500. -}
  1501. -
  1502. -function lp_login_from_saved()
  1503. -{
  1504. -  var users = lp_get_loginusers();
  1505. -  if (users.length > 0) {
  1506. -    var lastuser = users[0];
  1507. -    var pwmap = lp_get_loginpws();
  1508. -    if (typeof(pwmap[lastuser]) != 'undefined') {
  1509. -      var lastpass = pwmap[lastuser];
  1510. -      LP.lplogin(lastuser, lastpass, 0);
  1511. -      return;
  1512. -    }
  1513. -  }
  1514. -  if(lpopenloginstart){
  1515. -    LP.lpOpenLogin();
  1516. -  }
  1517. -}
  1518. -
  1519.  this.lpshowHelpDlg=function(topic, wino){
  1520.  
  1521.    if(!LP.lphelpstats) return;
  1522.  
  1523. changeset:   14878:a06fb4815742
  1524. user:        Andrew Zitnay <drew@lastpass.com>
  1525. date:        Thu Sep 17 11:04:09 2009 -0400
  1526. files:       firefox/content/lastpass.js
  1527. description:
  1528. even though none of the other hotkeys get defaults for mac, we still need to set the prefs, lest we warn about restsrting to put new hotkeys into effect the first time preferences is submitted regardless of whether or not they actually changed hotkeys
  1529.  
  1530.  
  1531. diff -r 595739c7a5aa -r a06fb4815742 firefox/content/lastpass.js
  1532. --- a/firefox/content/lastpass.js    Thu Sep 17 10:45:32 2009 -0400
  1533. +++ b/firefox/content/lastpass.js    Thu Sep 17 11:04:09 2009 -0400
  1534. @@ -13346,28 +13346,37 @@
  1535.        }
  1536.        flush = true;
  1537.      }
  1538. -    if(!LP.lpprefsHasUserValue("submitHkKeyCode", false)){  
  1539. -      LP.lpprefsSetIntPref("submitHkKeyCode", 0, false);
  1540. -      LP.lpprefsSetCharPref("submitHkMods", "", false);
  1541. -      flush = true;
  1542. -    }
  1543. -    if(!LP.lpprefsHasUserValue("saveallHkKeyCode", false)){  
  1544. -      //these were also added at the same time. so can lump together.
  1545. -      LP.lpprefsSetIntPref("saveallHkKeyCode", 0, false);
  1546. -      LP.lpprefsSetCharPref("saveallHkMods", "", false);
  1547. -      LP.lpprefsSetIntPref("logoffHkKeyCode", 0, false);
  1548. -      LP.lpprefsSetCharPref("logoffHkMods", "", false);
  1549. -      flush = true;
  1550. -    }
  1551. -  }else{
  1552. -    if(!LP.lpprefsHasUserValue("nextHkKeyCode", false)){  
  1553. +  }else{
  1554. +    if(!LP.lpprefsHasUserValue("generateHkKeyCode", false)){  
  1555. +      //can lump all of these together. they were added at the same time.
  1556. +      LP.lpprefsSetIntPref("generateHkKeyCode", 0, false); 
  1557. +      LP.lpprefsSetCharPref("generateHkMods", "", false);
  1558. +      LP.lpprefsSetIntPref("recheckHkKeyCode", 0, false);
  1559. +      LP.lpprefsSetCharPref("recheckHkMods", "", false);
  1560. +      LP.lpprefsSetIntPref("searchHkKeyCode", 0, false);
  1561. +      LP.lpprefsSetCharPref("searchHkMods", "", false);
  1562.        LP.lpprefsSetIntPref("nextHkKeyCode", 33, false);
  1563.        LP.lpprefsSetCharPref("nextHkMods", "meta", false);
  1564.        LP.lpprefsSetIntPref("prevHkKeyCode", 34, false);
  1565.        LP.lpprefsSetCharPref("prevHkMods", "meta", false);
  1566. +      LP.lpprefsSetIntPref("homeHkKeyCode", 0, false);
  1567. +      LP.lpprefsSetCharPref("homeHkMods", "", false);
  1568.        flush = true;
  1569.      }
  1570.    }
  1571. +  if(!LP.lpprefsHasUserValue("submitHkKeyCode", false)){  
  1572. +    LP.lpprefsSetIntPref("submitHkKeyCode", 0, false);
  1573. +    LP.lpprefsSetCharPref("submitHkMods", "", false);
  1574. +    flush = true;
  1575. +  }
  1576. +  if(!LP.lpprefsHasUserValue("saveallHkKeyCode", false)){  
  1577. +    //these were also added at the same time. so can lump together.
  1578. +    LP.lpprefsSetIntPref("saveallHkKeyCode", 0, false);
  1579. +    LP.lpprefsSetCharPref("saveallHkMods", "", false);
  1580. +    LP.lpprefsSetIntPref("logoffHkKeyCode", 0, false);
  1581. +    LP.lpprefsSetCharPref("logoffHkMods", "", false);
  1582. +    flush = true;
  1583. +  }
  1584.    if(flush)
  1585.      LP.flush_prefs();
  1586.  }
  1587.  
  1588. changeset:   14865:9988465808d9
  1589. user:        Andrew Zitnay <drew@lastpass.com>
  1590. date:        Tue Sep 15 21:43:00 2009 -0400
  1591. files:       firefox/content/general.xul firefox/content/lastpass.js firefox/content/prefs.js firefox/locale/en-US/lang.properties firefox/make_webroot_wisc
  1592. description:
  1593. sick of people asking about this hidden pref
  1594.  
  1595.  
  1596. diff -r d7f2228a6436 -r 9988465808d9 firefox/content/lastpass.js
  1597. --- a/firefox/content/lastpass.js    Tue Sep 15 21:34:53 2009 -0400
  1598. +++ b/firefox/content/lastpass.js    Tue Sep 15 21:43:00 2009 -0400
  1599. @@ -16017,12 +16017,17 @@
  1600.  this.hide_context = function(evt) {
  1601.    try {
  1602.      var doc = evt.target.ownerDocument ? evt.target.ownerDocument : LP.getBrowser().contentDocument;
  1603. -    if(lphidecontextmenu) {
  1604. -      if (doc.getElementById("lpt_lpcontentareacontextmenu")) {
  1605. +    if (doc.getElementById("lpt_lpcontentareacontextmenu")) {
  1606. +      if(lphidecontextmenu) {
  1607.          doc.getElementById("lpt_lpcontentareacontextmenu").setAttribute('hidden', true);
  1608.          doc.getElementById("lpt_lpcontentareacontextmenu").setAttribute('display', 'none');
  1609.          doc.getElementById("lpt_lpcontentareacontextmenuseparator").setAttribute('hidden', true);
  1610.          doc.getElementById("lpt_lpfillformsmenu4").setAttribute('hidden', true);
  1611. +      } else {
  1612. +        doc.getElementById("lpt_lpcontentareacontextmenu").setAttribute('hidden', false);
  1613. +        doc.getElementById("lpt_lpcontentareacontextmenu").setAttribute('display', '');
  1614. +        doc.getElementById("lpt_lpcontentareacontextmenuseparator").setAttribute('hidden', false);
  1615. +        doc.getElementById("lpt_lpfillformsmenu4").setAttribute('hidden', false);
  1616.        }
  1617.      }
  1618.    } catch(e) {
  1619.  
  1620. changeset:   14828:dca8e4aab3a2
  1621. parent:      14826:c2951d13a97b
  1622. user:        Bob Billingslea <robert.billingslea@gmail.com>
  1623. date:        Fri Sep 11 13:54:31 2009 -0400
  1624. files:       firefox/content/lastpass.js firefox/content/util.js firefox/content/utilc.js
  1625. description:
  1626. Pull lp_init_tlds into util so it can be reused. Definitely not something that we should duplicate.
  1627.  
  1628.  
  1629. diff -r c2951d13a97b -r dca8e4aab3a2 firefox/content/lastpass.js
  1630. --- a/firefox/content/lastpass.js    Fri Sep 11 12:48:44 2009 -0400
  1631. +++ b/firefox/content/lastpass.js    Fri Sep 11 13:54:31 2009 -0400
  1632. @@ -12933,181 +12933,6 @@
  1633.    return currnot && typeof(currnot.choices) != 'undefined' && currnot.choices == choices && (ignoreold || typeof(currnot.lpoldnotification) == 'undefined') ? true : false;
  1634.  }
  1635.  
  1636. -function lp_init_tlds()
  1637. -{
  1638. -  if (typeof(lp_all_tlds) == 'undefined' || lp_all_tlds == null) {
  1639. -    lp_all_tlds = new Array();
  1640. -    lp_all_tlds['hu'] = new Array('2000', 'agrar', 'bolt', 'casino', 'city', 'co', 'com', 'erotica', 'erotika', 'film', 'forum', 'games', 'hotel', 'info', 'ingatlan', 'jogasz', 'konyvelo', 'lakas', 'media', 'news', 'nui', 'org', 'priv', 'reklam', 'sex', 'shop', 'sport', 'suli', 'szex', 'tm', 'tozsde', 'utazas', 'video');
  1641. -    lp_all_tlds['nl'] = new Array('752');
  1642. -    lp_all_tlds['ca'] = new Array('ab', 'bc', 'gc', 'mb', 'nb', 'nf', 'nl', 'ns', 'nt', 'nu', 'on', 'pe', 'qc', 'sk', 'yk');
  1643. -    lp_all_tlds['pa'] = new Array('abo', 'ac', 'com', 'edu', 'gob', 'ing', 'med', 'net', 'nom', 'org', 'sld');
  1644. -    lp_all_tlds['se'] = new Array('ab', 'ac', 'bd', 'brand', 'com', 'c', 'd', 'e', 'fh', 'fhsk', 'fhv', 'f', 'g', 'h', 'i', 'komforb', 'kommunalforbund', 'komvux', 'k', 'lanarb', 'lanbib', 'mil', 'm', 'naturbruksgymn', 'net', 'n', 'org', 'o', 'parti', 'pp', 'press', 's', 'sshn', 'tm', 't', 'u', 'w', 'x', 'y', 'z');
  1645. -    lp_all_tlds['ac'] = new Array('ac', 'co', 'com', 'edu', 'gov', 'gv', 'mil', 'net', 'or', 'org');
  1646. -    lp_all_tlds['ae'] = new Array('ac', 'com', 'gov', 'mil', 'name', 'net', 'org', 'pro', 'sch');
  1647. -    lp_all_tlds['at'] = new Array('ac', 'co', 'gv', 'or', 'priv');
  1648. -    lp_all_tlds['be'] = new Array('ac', 'ap', 'co', 'com', 'fgov', 'to', 'xa');
  1649. -    lp_all_tlds['cn'] = new Array('ac', 'ah', 'bj', 'com', 'cq', 'edu', 'fj', 'gd', 'gov', 'gs', 'gx', 'gz', 'ha', 'hb', 'he', 'hi', 'hk', 'hl', 'hn', 'jl', 'js', 'jx', 'ln', 'mo', 'net', 'nm', 'nx', 'org', 'qh', 'sc', 'sd', 'sh', 'sn', 'sx', 'tj', 'tw', 'xj', 'xz', 'yn', 'zj');
  1650. -    lp_all_tlds['cr'] = new Array('ac', 'co', 'ed', 'fi', 'go', 'or', 'sa');
  1651. -    lp_all_tlds['cy'] = new Array('ac', 'biz', 'com', 'ekloges', 'gov', 'info', 'ltd', 'name', 'net', 'org', 'parliament', 'press', 'pro', 'tm');
  1652. -    lp_all_tlds['fj'] = new Array('ac', 'biz', 'com', 'gov', 'id', 'info', 'mil', 'name', 'net', 'org', 'pro', 'school');
  1653. -    lp_all_tlds['fk'] = new Array('ac', 'co', 'gov', 'net', 'nom', 'org');
  1654. -    lp_all_tlds['gg'] = new Array('ac', 'alderney', 'co', 'gov', 'guernsey', 'ind', 'ltd', 'net', 'org', 'sark', 'sch');
  1655. -    lp_all_tlds['gn'] = new Array('ac', 'com', 'gov', 'net', 'org');
  1656. -    lp_all_tlds['id'] = new Array('ac', 'co', 'go', 'mil', 'net', 'or', 'sch', 'web');
  1657. -    lp_all_tlds['il'] = new Array('ac', 'co', 'gov', 'idf', 'k12', 'muni', 'net', 'org');
  1658. -    lp_all_tlds['im'] = new Array('ac', 'co', 'gov', 'net', 'nic', 'org');
  1659. -    lp_all_tl